#pragma once

#include "iostream"
#include "vector"
#include "algorithm"

using namespace std;
/*HJJ QQ479287006
 *给定一个 N 叉树，返回其节点值的层序遍历。（即从左到右，逐层遍历）。

树的序列化输入是用层序遍历，每组子节点都由 null 值分隔（参见示例）。

 

示例 1：



输入：root = [1,null,3,2,4,null,5,6]
输出：[[1],[3,2,4],[5,6]]

来源：力扣（LeetCode）
链接：https://leetcode.cn/problems/n-ary-tree-level-order-traversal
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * */


// Definition for a Node.
class Node {
public:
    int val;
    vector<Node *> children;

    Node() {}

    Node(int _val) {
        val = _val;
    }

    Node(int _val, vector<Node *> _children) {
        val = _val;
        children = _children;
    }
};

vector<vector<int>> levelOrder(Node *root) {

    vector<vector<int>> ret;

    queue < Node * > q;
    if (!root)
        return ret;
    q.push(root);

    while (!q.empty()) {
        int size = q.size();

        vector<int> t;
        for (int i = 0; i < size; ++i) {
            Node *temp = q.front();
            t.push_back(temp->val);
            q.pop();

            for (const auto &item : temp->children) {
                q.push(item);
            }

        }
        ret.push_back(t);


    }

    return ret;

}